// middleware/auth.ts
import { Context, Next } from 'koa';
import jwt from 'jsonwebtoken';
import { User } from '../models/user'; // 确保路径正确
export const authMiddleware = async (ctx: Context, next: Next) => {
    let notokenArr = ['/login','/register'];
    let url = ctx.request.url;
    if(notokenArr.indexOf(url) > -1){
        await next();
        return;
    }
    const token = ctx.request.headers['authorization'];
    // 验证token有效性
    
    if (!token) {
        ctx.status = 401;
        ctx.body = 'Authorization token is missing';
        return;
    }
    try {
        const decoded = jwt.verify(token, 'your_secret_key'); // 验证令牌
        const user = await User.findById(decoded.id); // 从数据库中查找用户
        if (!user || user.token !== token) {
            ctx.status = 401;
            ctx.body = { message: '令牌无效或已过期' };
            return;
        }
        ctx.state.user = decoded; // 将解码后的用户信息存储在 ctx.state 中
        await next(); // 继续处理请求
    } catch (error) {
        ctx.status = 401;
        ctx.body = { message: '令牌无效或已过期' };
    }
};
/**
 * 错误码定义
 * 200: 成功
 * 401: token过期或者不存在
 * 0: 其他错误
 * 
*/